
**********************************************************************
** Article: Online Answers to a Postal Survey: 						**
**			A Comparison of Election Surveys in Belgium, 2019-2024	**
** Journal: Survey Research Methods									**
** Date:	November 2025		 									**
** Authors:	Stiers, Hooghe, De Grauwe, & Voets						**
**********************************************************************

***Requirements
/*
The following two commands need to be installed by the user before running the code below:
Color scheme lean1
mplotoffset
*/


***Load data
use "Replication_data.dta"

*** Main analyses ***

***Table 1: Bivariate tests
*2019
ttest Sex if Year==2019 , by(Mode) 
ttest Age if Year==2019, by(Mode)
ttest Education if Year==2019, by(Mode)
ttest Income if Year==2019, by(Mode)
ttest Polinterest if Year==2019, by(Mode)
ttest Knowledge if Year==2019, by(Mode)
ttest Ideology if Year==2019, by(Mode)
ttest Living_environment if Year==2019, by(Mode)
ttest Region if Year==2019, by(Mode)
*2024
ttest Sex if Year==2024, by(Mode)
ttest Age if Year==2024, by(Mode)
ttest Education if Year==2024, by(Mode)
ttest Income if Year==2024, by(Mode)
ttest Polinterest if Year==2024, by(Mode)
ttest Knowledge if Year==2024, by(Mode)
ttest Ideology if Year==2024, by(Mode)
ttest Living_environment if Year==2024, by(Mode)
ttest Region if Year==2024, by(Mode)


***Table 2. Logistic regression models explaining survey response mode
*Model 1
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region if Year==2019
//Figure 1 panel 1
margins, at(Age=(18(1)85))
marginsplot , scheme(lean1) recast(line) recastci(rline) ciopts(lpattern(shortdash))  title("") ytitle("Probability paper response") addplot(hist Age if Year==2019, percent yaxis(2) yscale(axis(2) alt) xlabel(18 25(5)85) yscale(range(0(10)20) axis(2)) ytitle("Percentage of observations", axis(2) placement(south))) title("2019") legend(off) name(F1,replace)

*Model 2
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region if Year==2024
//Figure 1 panel 2
margins, at(Age=(18(1)85))
marginsplot , scheme(lean1) recast(line) recastci(rline) ciopts(lpattern(shortdash)) xlabel(18 25(5)85) title("") ytitle("Probability paper response") addplot(hist Age if Year==2024, percent yaxis(2) yscale(axis(2) alt) xlabel(18 25(5)85) yscale(range(0(10)40) axis(2)) ytitle("Percentage of observations", axis(2) placement(south)))  title("2024") legend(off) name(F2,replace)

*Model 3
melogit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region Population_density Relative_mailboxes if Year==2024 || Municipality:

*Figure 1 final
graph combine F1 F2 , scheme(lean1) ycommon xsize(9)


***Appendix E and Figure 2: Full effects of the interactions
*Model 1
logit Mode i.Sex##i.Year Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region
//Figure 2 panel 1
margins Year#Sex
mplotoffset , offset(0.5) scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Sex",size(small)) ytitle("Proportion paper responses",size(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) name(F1,replace)

*Model 2
logit Mode i.Sex c.Age##i.Year c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region
//figure 2 panel 2
margins , at(Age=(18(1)85) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Age",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Age",size(small)) xlabel(18 25(10)85,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F2,replace)

*Model 3
logit Mode i.Sex Age c.Age#c.Age##i.Year Education Income Polinterest Knowledge Ideology Living_environment i.Region
//figure 2 panel 3
margins , at(Age=(18(1)85) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Age{superscript:2}",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Age{superscript:2}",size(small)) xlabel(18 25(10)85,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F3,replace)

*Model 4
logit Mode i.Sex Age c.Age#c.Age c.Education##i.Year Income Polinterest Knowledge Ideology Living_environment i.Region
//figure 2 panel 4
margins , at(Education=(1(1)9) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Educational level",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Educational level",size(small) margin(0 0 0 3)) xlabel(,labsize(small) alternate) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) graphregion(margin(0 8 0 0)) name(F4,replace)

*Model 5
logit Mode i.Sex Age c.Age#c.Age Education c.Income##i.Year Polinterest Knowledge Ideology Living_environment i.Region
//figure 2 panel 5
margins , at(Income=(0(0.14)1) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Income",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Income",size(small)) xlabel(,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F5,replace)

*Model 6
logit Mode i.Sex Age c.Age#c.Age Education Income c.Polinterest##i.Year Knowledge Ideology Living_environment i.Region
//figure 2 panel 6
margins , at(Polinterest=(0(1)3) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Political interest",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Interest",size(small)) xlabel(,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F6,replace)

*Model 7
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest c.Knowledge##i.Year Ideology Living_environment i.Region
//figure 2 panel 7
margins , at(Knowledge=(0(1)4) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Political knowledge",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Knowledge",size(small)) xlabel(,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F7,replace)

*Model 8
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology##i.Year Living_environment i.Region
//figure 2 panel 8
margins , at(Ideology=(0(1)10) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Political ideology",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Ideology",size(small)) xlabel(,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F8,replace)

*Model 9
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology c.Living_environment##i.Year i.Region
//figure 2 panel 9
margins , at(Living_environment=(1(1)4) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Urbanization",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Environment",size(small)) xlabel(,labsize(small)) graphregion(margin(0 6.5 0 0)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F9,replace)

*Model 10
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology Living_environment i.Region##i.Year
//figure 2 panel 10
margins Year#Region
mplotoffset , offset(0.5) scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Region",size(small)) ytitle("Proportion paper responses",size(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) name(F10,replace)

*Figure 2 final
graph combine F1 F2 F3 F4 F5 F6 F7 F8 F9 F10, scheme(lean1) r(2) imargin(zero) xsize(7) iscale(0.5)


*** Appendices ***

***Appendix A: Variables in the analyses
*Table A.2. Descriptive statistics of the variables for 2019
sum Sex Age Education Living_environment Income Polinterest Knowledge Ideology Region if Year==2019

*Table A.3. Descriptive statistics of the variables for 2024
sum Sex Age Education Living_environment Income Polinterest Knowledge Ideology Region Relative_mailboxes Population_density if Year==2024


***Appendix B: Replication of the analyses for respondents answering before the first reminder
*Table B.1. Bivariate tests
//2019
ttest Sex if Year==2019 & Beforereminder==1 , by(Mode) 
ttest Age if Year==2019 & Beforereminder==1, by(Mode)
ttest Education if Year==2019 & Beforereminder==1 , by(Mode)
ttest Income if Year==2019 & Beforereminder==1 , by(Mode)
ttest Polinterest if Year==2019 & Beforereminder==1 , by(Mode)
ttest Knowledge if Year==2019 & Beforereminder==1 , by(Mode)
ttest Ideology if Year==2019 & Beforereminder==1 , by(Mode)
ttest Living_environment if Year==2019 & Beforereminder==1 , by(Mode)
ttest Region if Year==2019 & Beforereminder==1 , by(Mode)
//2024
ttest Sex if Year==2024 & Beforereminder==1 , by(Mode)
ttest Age if Year==2024 & Beforereminder==1 , by(Mode)
ttest Education if Year==2024 & Beforereminder==1 , by(Mode)
ttest Income if Year==2024 & Beforereminder==1 , by(Mode)
ttest Polinterest if Year==2024 & Beforereminder==1 , by(Mode)
ttest Knowledge if Year==2024 & Beforereminder==1 , by(Mode)
ttest Ideology if Year==2024 & Beforereminder==1 , by(Mode)
ttest Living_environment if Year==2024 & Beforereminder==1 , by(Mode)
ttest Region if Year==2024 & Beforereminder==1 , by(Mode)


*Table B.2. Replication of Table 2 on a restricted sample
*Model 1
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region if Year==2019 & Beforereminder==1
//Figure B.1 panel 1
margins, at(Age=(18(1)85))
marginsplot , scheme(lean1) recast(line) recastci(rline) ciopts(lpattern(shortdash))  title("") ytitle("Probability paper response") addplot(hist Age if Year==2019, percent yaxis(2) yscale(axis(2) alt) xlabel(18 25(5)85) yscale(range(0(10)20) axis(2)) ytitle("Percentage of observations", axis(2) placement(south))) title("2019") legend(off) name(F1,replace)

*Model 2
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region if Year==2024 & Beforereminder==1
//Figure B.1 panel 2
margins, at(Age=(18(1)85))
marginsplot , scheme(lean1) recast(line) recastci(rline) ciopts(lpattern(shortdash)) xlabel(18 25(5)85) title("") ytitle("Probability paper response") addplot(hist Age if Year==2024, percent yaxis(2) yscale(axis(2) alt) xlabel(18 25(5)85) yscale(range(0(10)40) axis(2)) ytitle("Percentage of observations", axis(2) placement(south)))  title("2024") legend(off) name(F2,replace)

*Model 3
melogit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region Population_density Relative_mailboxes if Year==2024 & Beforereminder==1 || Municipality:

*Figure B.1 final
graph combine F1 F2 , scheme(lean1) ycommon xsize(9)


*Table B.3. Replication of Table E.1 on a restricted sample - and Figure B.2
*Model 1
logit Mode i.Sex##i.Year Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region if Beforereminder==1
//Figure B.2 panel 1
margins Year#Sex
mplotoffset , offset(0.5) scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Sex",size(small)) ytitle("Proportion paper responses",size(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) name(F1,replace)

*Model 2
logit Mode i.Sex c.Age##i.Year c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region if Beforereminder==1
//figure B.2 panel 2
margins , at(Age=(18(1)85) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Age",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Age",size(small)) xlabel(18 25(10)85,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F2,replace)

*Model 3
logit Mode i.Sex Age c.Age#c.Age##i.Year Education Income Polinterest Knowledge Ideology Living_environment i.Region if Beforereminder==1
//figure B.2 panel 3
margins , at(Age=(18(1)85) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Age{superscript:2}",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Age{superscript:2}",size(small)) xlabel(18 25(10)85,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F3,replace)

*Model 4
logit Mode i.Sex Age c.Age#c.Age c.Education##i.Year Income Polinterest Knowledge Ideology Living_environment i.Region if Beforereminder==1
//figure B.2 panel 4
margins , at(Education=(1(1)9) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Educational level",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Educational level",size(small) margin(0 0 0 3)) xlabel(,labsize(small) alternate) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) graphregion(margin(0 8 0 0)) name(F4,replace)

*Model 5
logit Mode i.Sex Age c.Age#c.Age Education c.Income##i.Year Polinterest Knowledge Ideology Living_environment i.Region if Beforereminder==1
//figure B.2 panel 5
margins , at(Income=(0(0.14)1) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Income",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Income",size(small)) xlabel(,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F5,replace)

*Model 6
logit Mode i.Sex Age c.Age#c.Age Education Income c.Polinterest##i.Year Knowledge Ideology Living_environment i.Region if Beforereminder==1
//figure B.2 panel 6
margins , at(Polinterest=(0(1)3) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Political interest",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Interest",size(small)) xlabel(,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F6,replace)

*Model 7
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest c.Knowledge##i.Year Ideology Living_environment i.Region if Beforereminder==1
//figure B.2 panel 7
margins , at(Knowledge=(0(1)4) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Political knowledge",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Knowledge",size(small)) xlabel(,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F7,replace)

*Model 8
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology##i.Year Living_environment i.Region if Beforereminder==1
//figure B.2 panel 8
margins , at(Ideology=(0(1)10) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Political ideology",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Ideology",size(small)) xlabel(,labsize(small)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F8,replace)

*Model 9
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology c.Living_environment##i.Year i.Region if Beforereminder==1
//figure B.2 panel 9
margins , at(Living_environment=(1(1)4) Year=(2019 2024))
marginsplot , scheme(lean1) recast(line) recastci(rarea) ci1opts(fcolor(gs13)) ci2opts(fcolor(gs2%50)) title("Urbanization",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Environment",size(small)) xlabel(,labsize(small)) graphregion(margin(0 6.5 0 0)) legend(order(1 "2019" 2 "2024") pos(6) r(1) size(small)) name(F9,replace)

*Model 10
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology Living_environment i.Region##i.Year if Beforereminder==1
//figure B.2 panel 10
margins Year#Region
mplotoffset , offset(0.5) scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Region",size(small)) ytitle("Proportion paper responses",size(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) name(F10,replace)

*Figure B.2 final
graph combine F1 F2 F3 F4 F5 F6 F7 F8 F9 F10, scheme(lean1) r(2) imargin(zero) xsize(7) iscale(0.5)


***Appendix C: Explaining survey response mode using equivalised income
*Table C.1. Explaining survey response mode using equivalised income where it is assumed that person 2 is an adult and from person 3 onwards are children 
//Model 1
logit Mode i.Sex Age c.Age##c.Age Education income_eq Polinterest Knowledge Ideology Living_environment i.Region if Year==2019

//Model 2
logit Mode i.Sex Age c.Age##c.Age Education income_eq Polinterest Knowledge Ideology Living_environment i.Region if Year==2024

//Model 3
melogit Mode i.Sex Age c.Age##c.Age  Education income_eq Polinterest Knowledge Ideology Living_environment i.Region Population_density Relative_mailboxes if Year==2024 || Municipality:

*Figure C.1. Average marginal effect of Table C.1 for equivalised income
logit Mode i.Sex Age c.Age##c.Age Education c.income_eq##i.Year Polinterest Knowledge Ideology Living_environment i.Region if Beforereminder==1
margins , dydx(income_eq) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Income",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small))


*Table C.2. Explaining survey response mode using equivalised income where it is assumed that from person 2 onwards are children
//Model 1
logit Mode i.Sex Age c.Age##c.Age Education income_eq2 Polinterest Knowledge Ideology Living_environment i.Region if Year==2019

//Model 2
logit Mode i.Sex Age c.Age##c.Age Education income_eq2 Polinterest Knowledge Ideology Living_environment i.Region if Year==2024

//Model 3
melogit Mode i.Sex Age c.Age##c.Age  Education income_eq2 Polinterest Knowledge Ideology Living_environment i.Region Population_density Relative_mailboxes if Year==2024 || Municipality:

*Figure C.2. Average marginal effect of Table C.2 for equivalised income
logit Mode i.Sex Age c.Age##c.Age Education c.income_eq2##i.Year Polinterest Knowledge Ideology Living_environment i.Region if Beforereminder==1
margins , dydx(income_eq) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Income",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small))


*Table C.3. Explaining survey response mode using equivalised income where we do not know if the second person is an adult a child or not and from the third person onwards the following persons are considered children
//Model 1
logit Mode i.Sex Age c.Age##c.Age Education income_eq3 Polinterest Knowledge Ideology Living_environment i.Region if Year==2019

//Model 2
logit Mode i.Sex Age c.Age##c.Age Education income_eq3 Polinterest Knowledge Ideology Living_environment i.Region if Year==2024

//Model 3
melogit Mode i.Sex Age c.Age##c.Age  Education income_eq3 Polinterest Knowledge Ideology Living_environment i.Region Population_density Relative_mailboxes if Year==2024 || Municipality:

*Figure C.3. Average marginal effect of Table C.3 for equivalised income
logit Mode i.Sex Age c.Age##c.Age Education c.income_eq3##i.Year Polinterest Knowledge Ideology Living_environment i.Region if Beforereminder==1
margins , dydx(income_eq) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Income",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small))


***Appendix D: Including all interactions in one model
*Table D.1. Explaining survey response mode, models including all interactions
logit Mode i.Sex##i.Year c.Age##i.Year c.Age##c.Age##i.Year c.Education##i.Year c.Income##i.Year c.Polinterest##i.Year c.Knowledge##i.Year c.Ideology##i.Year c.Living_environment##i.Year i.Region##i.Year


***Appendix E. Full results of the models including interactions
//See above with code for Figure 2


***Appendix F: Average marginal effects of the interaction effects
*Sex
logit Mode i.Sex##i.Year Age c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region
//Figure F.1 panel 1
margins , dydx(Sex) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Sex",size(small)) ytitle("Proportion paper responses",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) name(F1,replace)

*Age
logit Mode i.Sex c.Age##i.Year c.Age#c.Age Education Income Polinterest Knowledge Ideology Living_environment i.Region
//Figure F.1 panel 2
margins , dydx(Age) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Age",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) yline(0,lpattern(shortdash)) name(F2,replace)

*Age2
logit Mode i.Sex Age Age2 i.Year Education Income Polinterest Knowledge Ideology Living_environment i.Region
//Figure F.1 panel 3
margins , dydx(Age2) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Age{superscript:2}",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) name(F3,replace)

*Educational level
logit Mode i.Sex Age c.Age#c.Age c.Education##i.Year Income Polinterest Knowledge Ideology Living_environment i.Region
//Figure F.1 panel 4
margins , dydx(Education) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Educational level",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) name(F4,replace)

*Income
logit Mode i.Sex Age c.Age#c.Age Education c.Income##i.Year Polinterest Knowledge Ideology Living_environment i.Region
//Figure F.1 panel 5
margins , dydx(Income) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Income",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) yline(0,lpattern(shortdash)) name(F5,replace)

*Political interest
logit Mode i.Sex Age c.Age#c.Age Education Income c.Polinterest##i.Year Knowledge Ideology Living_environment i.Region
//Figure F.1 panel 6
margins , dydx(Polinterest) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Political interest",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) yline(0,lpattern(shortdash)) name(F6,replace)

*Political knowledge
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest c.Knowledge##i.Year Ideology Living_environment i.Region
//Figure F.1 panel 7
margins , dydx(Knowledge) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Political knowledge",size(small)) ytitle("Effect on responding on paper",size(small) margin(0)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) yline(0,lpattern(shortdash)) name(F7,replace)

*Ideology
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology##i.Year Living_environment i.Region
//Figure F.1 panel 8
margins , dydx(Ideology) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Political ideology",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) yline(0,lpattern(shortdash)) name(F8,replace)

*Urbanization
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology c.Living_environment##i.Year i.Region
//Figure F.1 panel 9
margins , dydx(Living_environment) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Urbanization",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) yline(0,lpattern(shortdash)) name(F9,replace)

*Region
logit Mode i.Sex Age c.Age#c.Age Education Income Polinterest Knowledge c.Ideology Living_environment i.Region##i.Year
//Figure F.1 panel 10
margins , dydx(Region) at(Year=(2019 2024))
marginsplot , scheme(lean1) recast(scatter) xscale(range(2016 2027)) title("Region",size(small)) ytitle("Effect on responding on paper",size(small)) ylabel(,labsize(small)) xtitle("Year",size(small)) xlabel(,labsize(small)) legend(pos(6) r(1) size(small)) yline(0,lpattern(shortdash)) name(F10,replace)

*Combine graphs
graph combine F1 F2 F3 F4 F5 F6 F7 F8 F9 F10, scheme(lean1) r(2) imargin(zero) xsize(7)


***Appendix G: Parsimonious models including interactions
*Table G.1 Replication of Table E.1 without control variables
//Model 1
logit Mode i.Sex##i.Year

//Model 2
logit Mode c.Age##i.Year

//Model 3
logit Mode c.Age#c.Age##i.Year 

//Model 4
logit Mode c.Education##i.Year

//Model 5
logit Mode c.Income##i.Year

//Model 6
logit Mode c.Polinterest##i.Year

//Model 7
logit Mode c.Knowledge##i.Year

//Model 8
logit Mode c.Ideology##i.Year

//Model 9
logit Mode c.Living_environment##i.Year

//Model 10
logit Mode i.Region##i.Year
